﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Sofire.DataComm.Remoting.Client;

namespace Sofire.DataComm.Remoting
{
    /// <summary>
    /// 表示一个通道。
    /// </summary>
    public interface IChannel : ICommunication
    {
        /// <summary>
        /// 设置或获取一个值，指示是否启用异步调用。默认为 false，表示同步调用。
        /// </summary>
        bool AsynInvokMethod { get; set; }
        /// <summary>
        /// 通道的账户。
        /// </summary>
        RegisterInfo Info { get; }
        /// <summary>
        /// 获取通道会话编号。
        /// </summary>
        string SessionID { get; }
        /// <summary>
        /// 动态调用指定参数的远程方法。
        /// </summary>
        /// <param name="methodInfo">契约的方法元数据。</param>
        /// <param name="parameters">方法的参数集合。</param>
        /// <returns>一组方法调用后的返回值。索引 (0) 表示方法的返回值，其他表示 "ref" 或 "out" 的返回值。</returns>
        object[] DynamicInvoke(MethodInfo methodInfo, params object[] parameters);
    }

}
